API Authentication এবং Token Based Security

Web Development - কোডইগনাইটার (Codeigniter) - CodeIgniter এর RESTful API তৈরি |

API Authentication এবং Token Based Security ওয়েব অ্যাপ্লিকেশন বা মোবাইল অ্যাপ্লিকেশনগুলির মধ্যে নিরাপদ ডেটা আদান-প্রদান এবং ব্যবহারকারী যাচাই করার জন্য অত্যন্ত গুরুত্বপূর্ণ। CodeIgniter ফ্রেমওয়ার্কে API Authentication এবং Token-based Security বাস্তবায়নের জন্য সাধারণত JWT (JSON Web Token) বা OAuth পদ্ধতি ব্যবহৃত হয়।

এই গাইডে, আমরা JWT ব্যবহার করে API Authentication এবং Token Based Security কিভাবে CodeIgniter-এ বাস্তবায়ন করা যায়, তা ব্যাখ্যা করবো।


JWT (JSON Web Token) কী?

JWT (JSON Web Token) হল একটি ওপেন স্ট্যান্ডার্ড (RFC 7519) যা একটি টোকেন হিসেবে JSON অবজেক্টের মধ্যে তথ্য সংরক্ষণ করে। এটি নিরাপদভাবে একাধিক সিস্টেমের মধ্যে তথ্য আদান-প্রদান করতে ব্যবহৃত হয়। JWT একটি header, payload, এবং signature দ্বারা গঠিত।

  1. Header: টোকেনের ধরণ (যেমন JWT) এবং সাইনিং এলগরিদম।
  2. Payload: তথ্য বা দাবি যা টোকেনের মধ্যে রাখা হয়।
  3. Signature: টোকেনের অখণ্ডতা যাচাই করতে ব্যবহৃত।

JWT Token-Based Authentication বাস্তবায়ন

১. JWT Library ইনস্টলেশন

CodeIgniter এ JWT authentication বাস্তবায়নের জন্য একটি JWT লাইব্রেরি ইনস্টল করতে হবে। এটি ব্যবহার করার জন্য একটি third-party library বা composer ব্যবহার করা যেতে পারে।

১.1 JWT লাইব্রেরি ইনস্টলেশন (Composer)

যদি Composer ব্যবহার করেন, তাহলে আপনার প্রজেক্টের ডিরেক্টরিতে কমান্ড চালান:

composer require firebase/php-jwt
১.2 JWT লাইব্রেরি ইনস্টলেশন (Manual)

যদি Composer ব্যবহার না করেন, তাহলে firebase/php-jwt লাইব্রেরিটি GitHub থেকে ডাউনলোড করে application/libraries ফোল্ডারে রাখুন।


২. JWT লাইব্রেরি লোড করা

যদি আপনি manual ইনস্টলেশন করেন, তবে JWT.php ক্লাস লোড করতে হবে:

require_once(APPPATH.'libraries/JWT.php');

৩. JWT Authentication Controller তৈরি

এখন আমরা Authentication Controller তৈরি করবো, যা লগইন করলে JWT টোকেন তৈরি করবে এবং API রিকোয়েস্টে ওই টোকেন যাচাই করবে।

৩.1 Authentication Controller (Login এবং JWT Token রিটার্ন)
<?php
defined('BASEPATH') OR exit('No direct script access allowed');

use \Firebase\JWT\JWT;

class Auth extends CI_Controller {

    private $secret_key = "your_secret_key"; // আপনার সিক্রেট কি

    public function __construct() {
        parent::__construct();
        $this->load->library('form_validation');
        $this->load->model('User_model');
    }

    // লগইন এবং JWT টোকেন রিটার্ন
    public function login() {
        $username = $this->input->post('username');
        $password = $this->input->post('password');

        $user = $this->User_model->get_user_by_credentials($username, $password);

        if ($user) {
            // JWT টোকেন তৈরি
            $payload = array(
                "iat" => time(),
                "exp" => time() + 3600, // 1 ঘণ্টার জন্য টোকেন বৈধ
                "user_id" => $user->id
            );

            $jwt = JWT::encode($payload, $this->secret_key);

            // সফল লগইনের পরে JWT টোকেন রিটার্ন
            echo json_encode(array('status' => 'success', 'token' => $jwt));
        } else {
            // ইউজার পাওয়া না গেলে
            echo json_encode(array('status' => 'error', 'message' => 'Invalid credentials'));
        }
    }
}
  • এখানে login() মেথড ব্যবহারকারী নাম এবং পাসওয়ার্ড যাচাই করে এবং যদি সঠিক হয় তবে JWT টোকেন তৈরি করে।
  • JWT::encode() ফাংশনটি টোকেন তৈরি করতে ব্যবহার করা হয়।

৪. JWT Token যাচাই করা

এখন API রিকোয়েস্টে JWT টোকেন যাচাই করার জন্য একটি মেথড তৈরি করা হবে।

৪.1 API Controller (JWT Token যাচাই)
<?php
defined('BASEPATH') OR exit('No direct script access allowed');

use \Firebase\JWT\JWT;

class Api extends CI_Controller {

    private $secret_key = "your_secret_key"; // আপনার সিক্রেট কি

    public function __construct() {
        parent::__construct();
    }

    // Token যাচাই
    public function authenticate() {
        $token = $this->input->get_request_header('Authorization'); // Authorization হেডার থেকে টোকেন পাওয়া
        if ($token) {
            try {
                // JWT টোকেন ডিকোড করা
                $decoded = JWT::decode($token, $this->secret_key);
                $user_id = $decoded->user_id; // টোকেন থেকে ইউজার আইডি পাওয়া

                // সফলভাবে যাচাই হলে, ডেটা রিটার্ন
                echo json_encode(array('status' => 'success', 'user_id' => $user_id));
            } catch (Exception $e) {
                // যদি টোকেন অবৈধ হয়
                echo json_encode(array('status' => 'error', 'message' => 'Invalid token'));
            }
        } else {
            echo json_encode(array('status' => 'error', 'message' => 'Token not provided'));
        }
    }
}
  • এখানে authenticate() মেথড ব্যবহার করে Authorization হেডার থেকে টোকেন বের করা হয় এবং JWT::decode() ফাংশন দ্বারা টোকেন ডিকোড করা হয়।

৫. JWT Token পাঠানোর উদাহরণ (AJAX)

এখন আমরা AJAX কলের মাধ্যমে JWT টোকেন ব্যবহার করে ডেটা পাঠাবো।

$.ajax({
    url: 'http://example.com/api/authenticate', // API URL
    type: 'GET',
    headers: {
        'Authorization': 'Bearer ' + token // JWT টোকেন
    },
    success: function(response) {
        console.log(response);
    },
    error: function() {
        console.log('Invalid token');
    }
});
  • এখানে Authorization হেডারে Bearer প্রিফিক্স সহ JWT টোকেন পাঠানো হয়।

CodeIgniter-এ API Authentication এবং Token-Based Security বাস্তবায়নের জন্য JWT (JSON Web Token) অত্যন্ত কার্যকরী পদ্ধতি। এটি নিরাপদ এবং কার্যকরী ডেটা আদান-প্রদান নিশ্চিত করে, যেখানে সার্ভার সাইডে শুধুমাত্র একটি সিক্রেট কিপর্যন্ত ব্যবহারকারী যাচাই করা হয়। JWT ব্যবহার করলে, আপনার API গুলি নিরাপদ এবং স্কেলেবল হবে।

Content added By
Promotion